/*******************************************************************************
 * 展示框架管理类，管理项包括：1、展示框架服务挂载；2、展示框架服务启动；3、展示框架插件初始化及启动接口；
 * 4、展示框架服务上下文管理，包括框架本身上下文，以及框架插件上下文
 ******************************************************************************/
Ext.define('WebOs.Kernel.ViewFrameMgr', {
	vframeser : null,
	status : 0,// 0:未初始化，1：已初始化，2：已启动加载vframe
	kernel : null,
	plugins_raw : null,
	vframeser_raw : null,
	all_views : [],

	constructor : function(config) {
		var me = this;
		Ext.apply(me, config);
		me.init();
	},

	getActiveFrame : function() {
		var me = this;
		if (me.status == 2) {
			return me.vframeser;
		}
	},

	// 初始化viewframework及plugins
	initVFrame : function(vf) {
		var me = this;
		if (me.status != 1) {
			log('[WARN]', 'view framework mgr is not init');
			return;
		}
		if (!vf) {
			log('[WARN]', 'can not find view framework');
			return;
		}
		// 启动viewframework服务
		var vname = vf;
		if (vname) {
			me.vframeser = me.kernel.smgr.startServiceByKey(vf);
			me.mountSubService(vname);
			me.status = 2;
			Ext.util.CSS.swapStyleSheet('service_css',Constants.SER_RES_PATH + 'css/service.css');
		};
	},

	// 配置数据初始化
	init : function() {
		var me = this;
		// 挂载vframe目录结构到sfs
		var vftoc = {
			pname : Constants.SFS_ROOT_NAME,
			name : Constants.SFS_VIEWFRAME_NAME,
			text : Constants.SFS_VIEWFRAME_NAME,
			serviceType : Constants.SFS_TYPE_TOC
		};

		me.kernel.sfs.mountFilesToParentFile(vftoc, Constants.SFS_ROOT_NAME,
				Constants.START_LEVEL_VFRAME);
		// 初始化VFRAME启动配置信息并挂载到sfs
		var vfsdata = webosCfg.vframeser;
		if (!vfsdata) {
			log('[WARN]', 'Can not find view framework init config : vframeser');
			return;
		}
		for (var p in vfsdata) {
			var vfs = vfsdata[p]
			var vscls = vfs.serviceCls, vname = vfs.name, isDefault = vfs.isDefault;
			if (!vscls) {
				log('[WARN]',
						'Can not find view framework class config : serviceCls');
				return;
			}
			if (!vname) {
				vname = me.kernel.idgen.generate();
				vfs.name = vname;
			}
			if (!vfs.text) {
				vfs.text = vname;
			}
			vfs.serviceType = Constants.SFS_TYPE_SER;

			me.kernel.sfs.mountFilesToParentFile(vfs,
					Constants.SFS_VIEWFRAME_NAME, Constants.START_LEVEL_VFRAME);
			me.all_views.push(vfs);
			if (isDefault) {
				me.vframeser_raw = vfs;
			}
		}

		// 初始化vframe plugins启动配置并挂载到sfs
		// var vplugins = webosCfg.vpluginser;
		// if (vplugins && vplugins.length > 0) {
		// for (var p in vplugins) {
		// var plugin_raw = vplugins[p];
		// if (!plugin_raw.serviceCls || !plugin_raw.name) {
		// log('[WARN]',
		// 'plugin\'s name and serviceCls can not be null!name : '
		// + plugin_raw.name + ',serviceCls : '
		// + plugin_raw.serviceCls);
		// continue;
		// }
		// plugin_raw.serviceType = Constants.SFS_TYPE_SER;
		// plugin_raw.vfname = plugin_raw.vfname
		// ? plugin_raw.vfname
		// : vfsdata.name;
		// me.kernel.sfs.mountFilesToParentFile(plugin_raw,
		// Constants.SFS_VIEWFRAME_NAME,
		// Constants.START_LEVEL_VFRAME);
		// }
		// }
		// me.plugins_raw = vplugins;
		me.status = 1;
	},

	mountSubService : function(vname) {
		var me = this;
		var subServices = webosCfg.vframesubser;
		if (subServices[vname]) {
			for (var p in subServices[vname]) {
				var ss = subServices[vname][p];
				if (!ss['name'] || !ss['serviceCls']) {
					console
							.log('[WARN]',
									'vframesubservice name and serviceCls can not be null');

					continue;
				}
				ss['serviceType'] = Constants.SFS_TYPE_VSUB;
				ss['vfname'] = vname;
				me.kernel.sfs.mountFilesToParentFile(ss,
						Constants.SFS_VIEWFRAME_NAME,
						Constants.START_LEVEL_VFRAME);
			}
		}
	}

});